pub mod scene;
pub mod renderer;

// struct Block(u8);

// impl Block {
//     fn get_faces(&self) -> &[u8; 6] {
//         const BLOCK_FACES: [[u8; 6]; 3] = [
//             [0, 0, 0, 0, 0, 0],
//             [1, 1, 1, 1, 1, 1],
//             [2, 2, 3, 4, 2, 2]
//         ];

//         &BLOCK_FACES[if self.0 > 2 { 0 } else { self.0 as usize }]
//     }
// }

// struct Chunk {
//     height: usize,
//     blocks: Vec<Block>
// }

// impl Chunk {
//     const WIDTH: usize = 16;
//     const AREA: usize = Self::WIDTH * Self::WIDTH;

//     fn pos_idx(pos: (usize, usize)) -> usize {
//         pos.0 * Self::WIDTH + pos.1
//     }

//     fn idx(pos: (usize, usize), y: usize) -> usize {
//         y * Self::AREA + Self::pos_idx(pos)
//     }

//     fn new(height: usize) -> Self {
//         let blocks = (0..Self::AREA * height)
//             .map(|_| Block(0))
//             .collect();

//         Self { height, blocks }
//     }

//     fn get(&self, pos: (usize, usize), y: usize) -> &Block {
//         &self.blocks[Self::idx(pos, y)]
//     }

//     fn set(&mut self, pos: (usize, usize), y: usize, block: Block) {
//         let idx = Self::idx(pos, y);
//         self.blocks[idx] = block;
//     }
// }

// pub struct State {
//     chunk: Chunk,
//     chunk_faces: Vec<u8>
// }

// impl State {
//     pub fn new() -> Self {
//         let mut chunk = Chunk::new(20);

//         chunk.set((7, 7), 0, Block(1));
//         chunk.set((7, 7), 1, Block(1));
//         chunk.set((7, 7), 2, Block(1));

//         let chunk_faces = chunk.blocks.iter().flat_map(|b| b.get_faces().clone()).collect();

//         Self { chunk, chunk_faces }
//     }
// }
